﻿Imports Persistencia
Imports Controle
Public Class relClientes
    Inherits relPadrao

#Region "Variáveis"
    Private objClientes As New perCliente
    Private objOcorrencias As New ctrOcorrencias
    Private iIdCliente As Int32
    Private iStatus As Int32
    Private iRegiao As Int32
    Private sCliente As String
    Private sStatus As String
    Private sRegiao As String
    Private bDetalhe As Boolean = True
    Private iTotalContatos As Int32
#End Region

#Region "Propriedades"

    Public Enum eTipoPessoa As Byte
        Juridica = 1
        Fisica = 0
    End Enum

    Public Property NomeCliente() As String
        Get
            Return Me.sCliente
        End Get
        Set(ByVal value As String)
            Me.sCliente = value
        End Set
    End Property

    Public Property NomeStatus() As String
        Get
            Return Me.sStatus
        End Get
        Set(ByVal value As String)
            Me.sStatus = value
        End Set
    End Property

    Public Property NomeRegiao() As String
        Get
            Return Me.sRegiao
        End Get
        Set(ByVal value As String)
            Me.sRegiao = value
        End Set
    End Property

    Public Property IDCliente() As Int32
        Get
            Return Me.iIdCliente
        End Get
        Set(ByVal value As Int32)
            Me.iIdCliente = value
        End Set
    End Property

    Public Property IDStatus() As Int32
        Get
            Return Me.iStatus
        End Get
        Set(ByVal value As Int32)
            Me.iStatus = value
        End Set
    End Property

    Public Property IDRegiao() As Int32
        Get
            Return Me.iRegiao
        End Get
        Set(ByVal value As Int32)
            Me.iRegiao = value
        End Set
    End Property

#End Region

#Region "Métodos privados"

    Private Sub relClientes_carregaDados(ByRef dsRPT As Object) Handles Me.carregaDados
        Dim dsClientes As New dsClientes
        Dim drClientes As dsClientes.ClientesRow
        Dim dtDadosClientes As New DataTable
        Dim dtDadosContatos As New DataTable
        Dim drDados As DataRow
        Dim iTipoPessoa As Int32
        Dim iTotalCliente As Int32 = 1
        Dim iIDCliente As Int32
        Dim sTipoPessoa As String

        Dim sBairro As String
        Dim sCidade As String
        Dim sEstado As String
        Dim sEndereco As String
        Dim dtUltimoContao As Date

        Try
            dtDadosClientes = Me.objClientes.selecionaCliente(Me.IDCliente, _
                                                              Me.IDRegiao, _
                                                              Me.IDStatus)


            If Not dtDadosClientes Is Nothing AndAlso dtDadosClientes.Rows.Count > 0 Then
                iIDCliente = dtDadosClientes.Rows(0).Item("IDCliente")
                For Each drDados In dtDadosClientes.Rows

                    sTipoPessoa = String.Empty

                    iTipoPessoa = drDados.Item("TipoPessoa")

                    Select Case iTipoPessoa
                        Case eTipoPessoa.Juridica
                            sTipoPessoa = "Jurídica"
                        Case eTipoPessoa.Fisica
                            sTipoPessoa = "Física"
                    End Select

                    sBairro = perConversao.nuloParaVazio(drDados.Item("Bairro"))
                    sCidade = perConversao.nuloParaVazio(drDados.Item("Cidade"))
                    sEstado = perConversao.nuloParaVazio(drDados.Item("Estado"))
                    sEndereco = perConversao.nuloParaVazio(drDados.Item("Endereco"))
                    If iIDCliente <> drDados.Item("IDCliente") Then
                        iTotalCliente += 1
                        iIDCliente = drDados.Item("IDCliente")
                    Else
                        iTotalCliente = iTotalCliente
                    End If

                    drClientes = DirectCast(dsRPT, dsClientes).Clientes.NewClientesRow
                    With drClientes
                        .IDCliente = drDados.Item("IDCliente")
                        .RazaoSocial = drDados.Item("RazaoSocial")
                        .CNPJ = perConversao.nuloParaVazio(drDados.Item("CNPJ"))
                        .Endereco = perConversao.nuloParaVazio(drDados.Item("Endereco"))
                        .Telefone = perConversao.nuloParaVazio(drDados.Item("Telefone"))
                        .Email = perConversao.nuloParaVazio(drDados.Item("Email"))
                        .Bairro = sBairro
                        .Cidade = sCidade
                        .Estado = sEstado
                        .Endereco = sEndereco
                        .CEP = perConversao.nuloParaVazio(drDados.Item("CEP"))
                        .Status = perConversao.nuloParaVazio(drDados.Item("Status"))
                        .TipoPessoa = sTipoPessoa
                        .InscEstadual = perConversao.nuloParaVazio(drDados.Item("InscEstadual"))
                        .Regiao = perConversao.nuloParaVazio(drDados.Item("Regiao"))
                        dtUltimoContao = objOcorrencias.RetornaUltimoContato(.IDCliente)
                        If Not dtUltimoContao = Date.MinValue Then
                            .UltimoContato = dtUltimoContao
                        End If
                        If Not drDados.Item("ProximoContato") Is DBNull.Value Then
                            .ProximoContato = drDados.Item("ProximoContato")
                        End If

                        .IDContato = perConversao.nuloParaZero(drDados.Item("IDContato"))
                        .NomeContato = perConversao.nuloParaVazio(drDados.Item("NomeContato"))
                        .DepartamentoContato = perConversao.nuloParaVazio(drDados.Item("Departamento"))
                        .TelefoneContato = perConversao.nuloParaVazio(drDados.Item("TelefoneContato"))
                        .CelularContato = perConversao.nuloParaVazio(drDados.Item("Celular"))
                        .FaxContato = perConversao.nuloParaVazio(drDados.Item("Fax"))
                        .EmailContato = perConversao.nuloParaVazio(drDados.Item("EmailContato"))
                        .TotalContato = perConversao.ToInt32(drDados.Item("TotalContato"))
                        .TotalCliente = iTotalCliente
                    End With
                    DirectCast(dsRPT, dsClientes).Clientes.AddClientesRow(drClientes)
                Next

            End If

        Catch ex As Exception
            Throw New Exception("Exceção no método 'carregaDados'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Sub

    Private Sub relClientes_carregaFormulas(ByRef crRPT As Object) Handles Me.carregaFormulas
        Dim sSubTitulo As String = ""

        If (Me.IDCliente <> 0) Then
            sSubTitulo &= "Cliente: " & Me.sCliente
        Else
            sSubTitulo &= "Cliente: todos"
        End If
        sSubTitulo &= "".PadLeft(3)

        If (Me.iStatus <> 0) Then
            sSubTitulo &= "Status: " & Me.sStatus
        Else
            sSubTitulo &= "Status: todos"
        End If
        sSubTitulo &= "".PadLeft(3)

        If (Me.iRegiao <> 0) Then
            sSubTitulo &= "Região: " & Me.sRegiao
        Else
            sSubTitulo &= "Região: todas"
        End If
        sSubTitulo &= "".PadLeft(3)

        With crRPT.DataDefinition.formulaFields
            .item("SubTitulo").text = "'" & sSubTitulo & "'"
        End With

    End Sub

#End Region

#Region "Métodos públicos"

    Public Function imprime(ByVal byDispositivoSaida As eDispositivoSaida) As Boolean
        Dim dsRPT As DataSet
        Dim crRPT As CrystalDecisions.CrystalReports.Engine.ReportClass
        Dim bProcesso As Boolean = False

        Try
            dsRPT = New dsClientes
            crRPT = New rptClientes

            crRPT.SummaryInfo.ReportTitle = "Relação de clientes"

            bProcesso = objRelatorio.processa(byDispositivoSaida = eDispositivoSaida.impressora, dsRPT, crRPT)

            Return bProcesso
        Catch ex As Exception
            Throw New Exception("Exceção no método 'imprime'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try
 
    End Function

#End Region

    
End Class
